/**
 * This class represents a product-handler
 * 
 * @author Konrad Paumann
 * @author Bernhard Denner
 * @author Maximilian Csuk
 * 
 * $Revision$ 
 * $Date$
 * 
 */

public class ProductHandler extends Handler {
	/**
	 * variables
	 */
	private final Product product;
	
	/**
	 * constructor
	 * @param product the product to handle
	 */
	public ProductHandler(Product product, User user, Logger logger) {
		super(user, logger);
		assert product != null;
		this.product = product;
	}
	
	/**
	 * returns the price
	 * @return the price
	 * @throws UserException
	 */
	public int getPrice() throws UserException {
		if (!getUser().canReadProduct()) {
			getLogger().log(getUser().getName(), "Lesen von Produkt-Preis verweigert");
			throw new UserException("User nicht authorisiert");
		}	
		
		return product.getPrice();
	}
	
	/**
	 * returns the amount
	 * @return the amount
	 * @throws UserException
	 */
	public int getAmount() throws UserException {
		if (!getUser().canReadProduct()) {
			getLogger().log(getUser().getName(), "Lesen von Produkt-Anzahl verweigert");
			throw new UserException("User nicht authorisiert");
		}
		
		return product.getPrice();
	}
	
	/**
	 * returns the short-description
	 * @return the short-desription
	 * @throws UserException
	 */
	public String getShortDescription() throws UserException {
		if (!getUser().canReadProduct()) {
			getLogger().log(getUser().getName(), "Lesen von Produkt-Kurzbeschreibung verweigert");
			throw new UserException("User nicht authorisiert");
		}
		
		return product.getShortDescription();
	}
	
	/**
	 * returns the description
	 * @return the desription
	 * @throws UserException
	 */
	public String getDescription() throws UserException {
		if (!getUser().canReadProduct()) {
			getLogger().log(getUser().getName(), "Lesen von Produkt-Beschreibung verweigert");
			throw new UserException("User nicht authorisiert");
		}
		
		return product.getDescription();
	}
	
	/**
	 * sets the price
	 * @param the price
	 * @throws ProductException
	 * @throws UserException
	 */
	public void setPrice(int price) throws ProductException, UserException {
		if (!getUser().canWriteProduct()) {
			getLogger().log(getUser().getName(), "Aendern von Produkt-Preis verweigert");
			throw new UserException("User nicht authorisiert");
		}
		
		try {
			product.setPrice(price);
		} catch (ProductException e) {
			throw new ProductException(e.getMessage());
		}
		
		getLogger().log(getUser().getName(), "Aendern von Produkt-Preis erfolgreich");
	}
	
	/**
	 * sets the amount
	 * @param the amount
	 * @throws ProductException
	 * @throws UserException
	 */
	public void setAmount(int amount) throws ProductException, UserException {
		if (!getUser().canWriteProduct()) {
			getLogger().log(getUser().getName(), "Aendern von Produkt-Anzahl verweigert");
			throw new UserException("User nicht authorisiert");
		}
		
		try {
			product.setAmount(amount);
		} catch (ProductException e) {
			throw new ProductException(e.getMessage());
		}
		getLogger().log(getUser().getName(), "Aendern von Produkt-Anzahl erfolgreich");
	}
	
	/**
	 * sets the description
	 * @param the description
	 * @throws UserException
	 */
	public void setDescription(String description) throws UserException {
		if (!getUser().canWriteProduct()) {
			getLogger().log(getUser().getName(), "Aendern von Produkt-Beschreibung verweigert");
			throw new UserException("User nicht authorisiert");
		}
		
		product.setDescription(description);
		getLogger().log(getUser().getName(), "Aendern von Produkt-Beschreibung erfolgreich");
	}
}
